Already normal form
http://example.com/
http://example.com/

Add a trailing slash
http://example.com
http://example.com/

Remove an empty port segment
http://example.com:/
http://example.com/

Remove a default port segment
http://example.com:80/
http://example.com/

Capitalization in host names
http://wWw.exaMPLE.COm/
http://www.example.com/

Capitalization in scheme names
htTP://example.com/
http://example.com/

Capitalization in percent-escaped reserved characters
http://example.com/foo%2cbar
http://example.com/foo%2Cbar

Unescape percent-encoded unreserved characters
http://example.com/foo%2Dbar%2dbaz
http://example.com/foo-bar-baz

remove_dot_segments example 1
http://example.com/a/b/c/./../../g
http://example.com/a/g

remove_dot_segments example 2
http://example.com/mid/content=5/../6
http://example.com/mid/6

remove_dot_segments: single-dot
http://example.com/a/./b
http://example.com/a/b

remove_dot_segments: double-dot
http://example.com/a/../b
http://example.com/b

remove_dot_segments: leading double-dot
http://example.com/../b
http://example.com/b

remove_dot_segments: trailing single-dot
http://example.com/a/.
http://example.com/a/

remove_dot_segments: trailing double-dot
http://example.com/a/..
http://example.com/

remove_dot_segments: trailing single-dot-slash
http://example.com/a/./
http://example.com/a/

remove_dot_segments: trailing double-dot-slash
http://example.com/a/../
http://example.com/

Test of all kinds of syntax-based normalization
hTTPS://a/./b/../b/%63/%7bfoo%7d
https://a/b/c/%7Bfoo%7D

Unsupported scheme
ftp://example.com/
fail

Non-absolute URI
http:/foo
fail

Illegal character in URI
http://<illegal>.com/
fail

Non-ascii character in URI
http://foo.com/
fail